# anki_to_sql_two_examples.py
import pandas as pd
import re

# 输入/输出文件名
input_file = "专升本英语单词.txt"         # Anki 导出的文件（含注释行）
output_file = "anki_for_db.csv"        # 生成的 CSV，用于导入数据库

# 读取 TSV，跳过以 # 开头的注释行
df = pd.read_csv(input_file, sep='\t', comment='#', header=None, dtype=str, keep_default_na=False)

def clean_html(text):
    """去掉 HTML 标签与实体，并修剪空白。"""
    if text is None:
        return ''
    # 将非字符串也转换为字符串
    s = str(text)
    # 去掉 HTML 标签
    s = re.sub(r'<[^>]+>', '', s)
    # 去掉 HTML 实体常见项
    s = s.replace('&nbsp;', ' ')
    s = s.replace('&quot;', '"').strip()
    # 去掉多余空白
    s = re.sub(r'\s+', ' ', s).strip()
    return s

def extract_audio_filename(text):
    """从类似 [sound:xxx.mp3] 中提取文件名（若无，返回空字符串）。"""
    if text is None:
        return ''
    s = str(text)
    m = re.search(r'\[sound:([^\]]+)\]', s)
    return m.group(1) if m else ''

def first_numbered_sentence(text):
    """
    从形如 "(1) ... (2) ... " 的字段中取第一条非空句子并去掉序号。
    如果找不到序号格式，则返回原始文本的前一句（以句号/问号/感叹号为界）或全部文本。
    """
    s = '' if text is None else str(text)
    s = clean_html(s)

    # 先尝试按 (1) (2) 这类序号分割，取第一个非空段
    parts = [p.strip() for p in re.split(r'\(\s*\d+\s*\)', s) if p.strip()]
    if parts:
        return parts[0]

    # 如果没有 (1) 格式，尝试按中文/英文句号、问号、感叹号分割取第一项
    split_by_punct = re.split(r'[。\.！？!?]\s*', s)
    if split_by_punct and split_by_punct[0].strip():
        return split_by_punct[0].strip()

    # 回退：返回去掉多余空白的全部文本
    return s.strip()

# 假设字段列索引（基于你之前样例）
# 0: 单词(word)
# 1: 音标(phonetic)
# 2: 中文释义(meaning)  <-- 你说这个字段保留，不动
# 3: 英文例句(可能含多个带编号)
# 4: 中文例句(可能含多个带编号)
# 9: 音频字段(e.g. [sound:xxx.mp3])
# 如果你的 TSV 列索引与此不同，请调整下面索引数字。

records = []
for _, row in df.iterrows():
    word = clean_html(row[0]) if len(row) > 0 else ''
    phonetic = clean_html(row[1]) if len(row) > 1 else ''
    meaning = clean_html(row[2]) if len(row) > 2 else ''
    en_field = row[3] if len(row) > 3 else ''
    cn_field = row[4] if len(row) > 4 else ''
    audio_field = row[9] if len(row) > 9 else ''

    example_en = first_numbered_sentence(en_field)
    example_cn = first_numbered_sentence(cn_field)
    audio_filename = extract_audio_filename(audio_field)

    records.append({
        'word': word,
        'phonetic': phonetic,
        'meaning': meaning,
        'example_sentence_en': example_en,
        'example_sentence_cn': example_cn,
        'audio_url': audio_filename
    })

# 生成 DataFrame 并输出 CSV（含表头）
df_out = pd.DataFrame(records, columns=[
    'word', 'phonetic', 'meaning', 'example_sentence_en', 'example_sentence_cn', 'audio_url'
])
df_out.to_csv(output_file, index=False, encoding='utf-8-sig')
print(f"生成完成：{output_file} （包含列：{', '.join(df_out.columns)})")
